Programmable devices are a class of general-purpose integrated circuits that can be configured for a wide variety of applications. Such programmable devices have two basic versions, mask programmable devices, which are programmed only by a manufacturer, and field programmable devices, which are programmable by the end user. In addition, programmable devices can be further categorized as programmable memory devices or programmable logic devices. Programmable memory devices include programmable read only memory (PROM), erasable programmable read only memory (EPROM) and electrically erasable programmable read only memory (EEPROM). Programmable logic devices include programmable logic array (PLA) devices, programmable array logic (PAL) devices, erasable programmable logic devices (EPLD), complex programmable logic devices (CPLD), and programmable gate arrays (PGAs) or field programmable gate arrays (FPGAs).
As chip capacity continues to increase significantly, the use of field programmable gate arrays (FPGAs) is quickly replacing the use of application specific integrated circuits (ASICs). An ASIC is a specialized integrated circuit that is designed for a particular application and can be implemented as a specialized microprocessor. In spite of including circuitry for being programmable, an FPGA has an extremely high density of electronic gates. This high gate density has contributed immensely to the popularity of FPGAS. FPGAs usually include user configurable input/output blocks (IOBs), and configurable logic blocks (CLBs) having configurable interconnects and switching capability.
The advancement of computer chip technology has also resulted in the development of embedded processors and controllers. An embedded processor or controller can be a microprocessor or microcontroller circuitry that has been integrated into an electronic device as opposed to being built as a standalone module or “plugin card.” Advancement of FPGA technology has led to the development of FPGA-based system-on-chips (SoCs) including FPGA-based embedded processor SoCs. An SoC is a fully functional product having its electronic circuitry contained on a single chip. While a microprocessor chip requires ancillary hardware electronic components to process instructions, an SoC would include all required ancillary electronics on the same chip. For example, an SoC for a cellular telephone can include a microprocessor, encoder, decoder, digital signal processor (DSP), RAM, and ROM. It should be understood that within contemplation of the present invention an FPGA-based SoC does not necessarily include a microprocessor or microcontroller. For example, an SoC for a cellular telephone could include an encoder, decoder, digital signal processor, RAM and ROM that rely on an external microprocessor chip. An SoC could also include multiple processing modules coupled to each other via a bus or several busses. It should also be understood herein that “FPGA-based embedded processor SoCs” are a specific subset of FPGA-based SoCs that include their own processors.
In order for device manufacturers to develop FPGA-based SoCs or FPGA-based embedded processor SoCs, they must acquire intellectual property rights for system components and/or related technologies that are utilized to create the FPGA-based SoCs. These system components and/or technologies are called cores or Intellectual Property (IP) cores. An electronic file containing system component information can typically be used to represent the core. A device manufacturer will generally acquire several cores that are integrated to fabricate the SoC. More generically, the IP cores can form one or more of the processing modules in an FPGA-based SoCs. The processing modules can either be hardware or software based.
Notwithstanding advantages provided by using FPGA-based SoCs, the development of these SoCs can be very challenging. One of the challenges is communication among multiple hardware and software processors embedded in an FPGA-based SoC. Typically, such communication occurs over a bus. Unfortunately, the embedded processors in an FPGA-based SoC are each treated as a separate computer requiring the use of a C compiler and a runtime stack or a conventional heap data structure. Additionally, existing FPGA-based embedded processor SoCs would require several programming languages to specify the entire design system. In particular, a system may require both a high-level language and a hardware description language (HDL) to define the hardware in the FPGA for the system solution. Furthermore, such an existing system will require a Real Time Operation System (RTOS). FPGA-based embedded processor SoCs are being introduced into the market, but there are no solutions which allow users to customize the system, the hardware and software processing modules, and the associated software, nor is there a system enabling a user to trade off between implementing a function in hardware (FPGA fabric) or software (running on the embedded processor). It would be desirable to have a method and system for enabling dynamic reconfigurable computing using automated translation that does not necessarily require a C compiler, a runtime stack or conventional heap data structure, an RTOS, or multiple programming languages in FPGA-based SoCs, and that further overcome the shortcomings described above.